// 1.导入加密模块
const crypto = require('crypto')
const { SECRET } = require('../constants')

// 2.创建加密方法
function _md5 (password) {
  /*
  MD5加密（加密不可逆）
  MD5的全称是Message-Digest Algorithm 5（信息-摘要算法）。 128位长度。
  目前MD5是一种不可逆算法。具有很高的安全性
  什么叫做不可逆?
  不可以通过加密之后的内容还原加密之前的内容, 我们就称之为不可逆
  * */
  // 1.指定加密方式
  const md5 = crypto.createHash('md5')
  // 2.指定需要加密的内容和加密之后输出的格式
  const hash = md5
    .update(password) // 指定需要加密的内容
    .digest('hex') // 指定加密之后输出的格式
  /*
  注意点:
  MD5加密, 只要加密的内容没有发生变化, 那么加密之后的内容就不会发生变化
  所以正式因为如此, 虽然MD5是不可逆的, 但是可以暴力破解
  正式因为如此, 所以仅仅通过MD5加密也不安全
  所以我们在加密之前应该对原始数据进行加盐操作
  什么叫做加盐?
  给原始数据混入一些其它数据
  * */
  return hash
}

// 生成密码
const secret = SECRET // 加盐
function generatePwd (password) {
  password = password + secret
  return _md5(password)
}

// _md5('abc123') // e99a18c428cb38d5f260853678922e03
// generatePwd('abc123') // abc123DefChigga => 341b4b977382d499ceb7aa8a983bf35c

module.exports = generatePwd
